DTO Validation using class-validator {NestJS}


ValidationPipe 객체를 app 의 global pipe로 추가하게 된다면, 컨트롤러가 인자에 들어온 DTO 타입을 해석하고 유효성 검사 및 자동 DTO 인스턴스 생성까지 해준다.

단지 컨트롤러 인자에 작성하는 Dto는 단순히 JS Plain Object의 형태로 들어온다. 따라서 ValidationPipe를 사용하여 페이로드를 자동으로 해당 타입에 맞는 DTO 인스턴스로 변환하는 과정이 필요하다.

async function bootstrap() {
	...
	app.useGlobalPipes(new ValidationPipe({
		transform: true,  // 자동으로 JS Object를 DTO로 변환 (Globally)
	}));
	...
}
@Post()
@UsePipes(new ValidationPipe( { transform: true } )) // 자동으로 JS Object를 DTO로 변환 (method-level)
create(@Body() createUserDto: CreateUserDto) {
	return 'This action adds a new user';
}

NestJS 또한 class-validator를 사용하는구나.

export class CreateUserDto {
	@IsEmail()
	email: string;

	@IsNotEmpty()
	password: string;
}

Body만 검사할 줄 아냐? Param도 가능하다~

/** find-one-params.ts */
export class FindOneParams {
	@isNumberString()
	id: number;
}

@Get(':id')
findOne(@Param() params: FindOneParams) {
	...
}